package com.ai.bd_util;

/**
 * ClassName:    BaiduAipUtil
 * Description:  TODO
 * Author:       yuzx
 * Date:         2025/9/9 10:13
 * Version:      1.0
 **/
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * 百度官方工具类简化实现（避免下载官方jar包，核心逻辑与官方一致）
 */
public class BaiduAipUtil {

    /**
     * Base64编码（与官方Base64Util.encode一致）
     * @param bytes 字节数组（图片）
     * @return Base64字符串（不含图片头）
     */
    public static String encodeBase64(byte[] bytes) {
        if (bytes == null || bytes.length == 0) {
            return null;
        }
        // 官方Base64编码逻辑（标准Base64，不换行）
        return Base64.getEncoder().encodeToString(bytes).replaceAll("\r|\n", "");
    }

    /**
     * 读取本地文件为字节数组（与官方FileUtil.readFileByBytes一致）
     * @param filePath 本地文件路径
     * @return 字节数组
     * @throws IOException 读取异常
     */
    public static byte[] readFileToBytes(String filePath) throws IOException {
        File file = new File(filePath);
        if (!file.exists()) {
            throw new IOException("文件不存在：" + filePath);
        }
        try (FileInputStream fis = new FileInputStream(file);
             ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
            byte[] buffer = new byte[1024];
            int len;
            while ((len = fis.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
            }
            return bos.toByteArray();
        }
    }

    /**
     * 图片Base64编码 + URL编码（官方核心流程：encode → URLEncoder）
     * @param base64Str 图片Base64字符串（不含头）
     * @return 编码后的图片参数（可直接用于构造param）
     */
    public static String encodeImageParam(String base64Str) {
        try {
            // 官方逻辑：URLEncoder.encode，字符集UTF-8
            return URLEncoder.encode(base64Str, StandardCharsets.UTF_8.name());
        } catch (Exception e) {
            throw new RuntimeException("图片参数编码失败", e);
        }
    }
}
